﻿/**
 * @file FrameworkThread.h
 * @brief SSD仿真系统线程基础类，支持线程启动、停止与状态管理。
 */
#ifndef __FrameworkThread_h__
#define __FrameworkThread_h__

#include <future>

/**
 * @class FrameworkThread
 * @brief 仿真系统线程基础类，支持线程启动、停止与状态管理。
 */
class FrameworkThread
{
public:
    /**
     * @brief 构造函数。
     */
    FrameworkThread();
    /**
     * @brief 移动构造函数。
     * @param rhs 右值对象
     */
    FrameworkThread(FrameworkThread &&rhs) : _StopSignal(std::move(rhs._StopSignal)), _StopFuture(std::move(rhs._StopFuture))
    {
    }

    /**
     * @brief 移动赋值操作。
     * @param rhs 右值对象
     * @return 当前对象引用
     */
    FrameworkThread &operator=(FrameworkThread &&rhs)
    {
        _StopSignal = std::move(rhs._StopSignal);
        _StopFuture = std::move(rhs._StopFuture);
        return *this;
    }

public:
    /**
     * @brief 线程主入口。
     */
    void operator()();
    /**
     * @brief 请求线程停止。
     */
    void Stop();

protected:
    /**
     * @brief 线程主循环，需由子类实现。
     */
    virtual void Run() = 0;
    /**
     * @brief 检查是否收到停止请求。
     * @return 是否收到停止信号
     */
    bool IsStopRequested();

private:
    std::promise<void> _StopSignal; /**< 停止信号 */
    std::future<void> _StopFuture;  /**< 停止信号对应的future */
};

#endif
